【Excel VBA】Application.MoveAfterReturnDirectionは安易に変更してはいけない
これはほぼ実話であり、私的記憶、一般人の分析、妄想による脚色により構成されています。
あとコレ書いてる人間はExcel VBAガチ素人なので、なんか変な点あったらご指摘ください。
〜ある日〜
KusattemoToFu.icon <ふう、次の動画用のデータの集計が終わった
KusattemoToFu.icon <なんか妙なデータ並びの表になっちゃったけど…
KusattemoToFu.icon<VBAでセル移動方向を変更してあげれば、Enterキーだけで楽に編集できちゃうね!/ktficons/enter_strong.icon/ktficons/enter_strong.icon/ktficons/enter_strong.icon
https://gyazo.com/358930f02386517e9690dd93fdd07b56
KusattemoToFu.icon <じゃあみんな、ファイル送るから確認お願い〜
https://gyazo.com/453e0cf7d58ca1e9f205a3ea59db2748
/ktficons/metan.icon<まったく、いつも丸投げばっかり…。あれ、マクロ使ってるのね。
/ktficons/allial.icon<でも送り主ははっきり→KusattemoToFu.iconしてるし、許可許可…っと
/ktficons/millial.icon<開いてみたけどこれは確認に時間がかかりそうだね…明日にしない?
〜翌日〜
/ktficons/metan.icon<さて、昨日のアレもあるけど、まずは勤怠表のExcelファイルから提出済ませますわよ
/ktficons/millial.icon<了解!
/ktficons/allial.icon<りょ
/ktficons/metan.icon<まずは1日目のデータを入力して、次は下のセルに… /ktficons/enter.icon
/ktficons/millial.icon<下のセルに…/ktficons/enter.icon
/ktficons/allial.icon<セルに…/ktficons/enter_strong.icon
https://gyazo.com/e1065c3208a41fb9f5ef60bdf0bb1e49
/ktficons/allial.icon/ktficons/millial.icon/ktficons/metan.icon<<<なにこれ!?!?Enterを押したら下じゃなくて右にカーソルが行くんだけど??????
何が起きたか
Excelで日本語入力中でないときにEnterキーを打つと、以下の挙動をすると思います
①原則、直下のセルに移動する
②直前のセル移動がTabキーでの横移動の場合、斜め下に移動する
上記の挙動は、データが縦並びの表を順番に編集していくことを想定しているものですが、
場合によってデータが横並びだったり、特定のファイルだけEnterキーの挙動を操作したい場合があるかもしれません
そういう意図で、下記のVBAだけがThisWorkBookオブジェクトに対し設定されたファイルに遭遇しました
code:returnToRight
Private Sub Workbook_Open()
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlToRight
End Sub
このファイルを開いてみると、Enterキーを押した際に選択セルが下ではなく右に移動するようになります
一見便利な小技に思えるこれですが、後遺症が残ります
このマクロが一度発火すると、別のファイルを開いたときにも同じようにEnterキーで右で移動するようになってしまうのです……
Excelの再起動やパソコンの再起動でも治らないので、けっこう困りますね
なお上記のアニメGIFはぜんぶMac版のものですが、Windows版でもおなじ現象が起こります
なぜ
これApplication.MoveAfterReturnDirectionとあるとおりApplicationオブジェクト(ユーザのExcel環境)を変更する命令なのです
Excelのオプション→詳細設定にある「Enterキーを押したら、セルを移動する」の設定を直接弄るのと同じことをしているわけで、当然別ファイルの編集時にも影響を及ぼします
上記の例ではThisWorkBookオブジェクトに対してこのマクロが組まれているため、起動するだけでExcelの設定が変わってしまうことになります
個人で使うファイルならまだ良いのですが、このファイルを複数人→/ktficons/allial.icon/ktficons/millial.icon/ktficons/metan.iconにばら撒いてしまった日には…大顰蹙必至ですね
/ktficons/metan.icon<わたくしを差し置いて黒魔術を使わないでいただきたい
なおしかた
影響を受けたすべての環境で、下記①か②のいずれかをやればよいです
①Excelのオプションからもとに戻す
WindowsとMacでやり方が少し違います
Windows版はOffice 2013から2024年5月時点での365まで同じやり方が使えることを確認済みです
https://gyazo.com/b45d3e6d8a3bea9de3a0dd562d2f19dchttps://gyazo.com/45f9548ad15b1af21bba6260a29050ffhttps://gyazo.com/f07917c2e23d2fc24dfdc1eda6aacfc9
Windows版の場合:「ファイル」→「オプション」→「詳細設定」→「Enterキーを押したら、セルを移動する」を「下」に
https://gyazo.com/b1f2501fbb9fbbca18a4d99496580f2fhttps://gyazo.com/83ca2380e3033a8e2a67cba8eb64802dhttps://gyazo.com/780ec6c6d7b486e56622f407814d2d5b
Mac版の場合:「Excel」→「環境設定」→「編集」→「入力後セル移動」を「下」に
②下記のVBAを実行する
code:returnToDown
Private Sub Workbook_Open()
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlDown
End Sub
影響を受けたパソコンが多い場合は、②のコードをThisWorkBookオブジェクトに埋め込んだxlsmファイルを撒いて、開いてもらうのが楽かもです
どうすればよかったか
そもそもTabキーで横に行くんだからそれで良くね?というのは置いといて……
どうしてもマクロでEnterキーで進む方向を変えたい場合、必ず以下の二点をセットで指定するようにします
code:safe_returnToRight
Private Sub Workbook_Open()
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlToRight
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlDown
End Sub
ファイルを閉じるときに設定を初期状態に戻してあげているわけですね
ただし、上記の対策も万全ではなく、同時に開いている別のファイルには影響が出ますし、Excelがフリーズなどで異常終了するとやはり後遺症が残るため、手動で戻す必要あり
他人に渡すファイルでは使わない方が安全かなーと思います
そして、初心者向けのサイト等でこの手法を紹介する際は、Excel本体の設定を変更するものであること、上記のような副作用があることを併記しておいて欲しいと思います